package com.zyp.template;


/**
 * 
 * 抽象模板类，定义并实现了一个模板方法。
 * 这个模板方法一般是一个具体方法，它给出了一个顶级逻辑的框架，而逻辑的组成步骤在相应的抽象方法中，推迟到子类实现
 * 
 */
public abstract class AbstractClass {
	
	
	public abstract void progress1();
	
	public abstract void progress2();

	/**
	 * 模板方法,定义了顶级逻辑框架的执行顺序，而对于具体的逻辑组成步骤 progress1(),progress2() 都延迟到子类实现
	 */
	public void templateMethod(){
		
		progress1();
		progress2();
		
		System.out.println("下面可以定义一些子类都统一实现且不变的代码");
		
		
	}
	
}




class ConcreateClassA extends AbstractClass{

	@Override
	public void progress1() { 
		System.out.println("具体类A---progress1");
	}

	@Override
	public void progress2() {
		System.out.println("具体类A---progress2");
	}
	
}


class ConcreateClassB extends AbstractClass{

	@Override
	public void progress1() {
		System.out.println("具体类B---progress1");
	}

	@Override
	public void progress2() {
		System.out.println("具体类B---progress2");
	}
	
}



